The client-server model of computing is pervasive and forms the basis for the Internet, the World-Wide Web (or simply the web), and cloud computing. A server is a computer program that serves requests of other programs, or clients. Client requests and server responses to those requests are communicated over a network such as the Internet. Further, various types of servers exist for addressing specific tasks including a web server that hosts web pages, and a database server that enables data storage, analysis and manipulation, among others.
For providers of physical hardware, such as servers, it is desirous to run applications for multiple tenants on the same physical hardware without compromising security. Virtual machines are utilized for this purpose. A physical machine comprises various computer hardware (e.g., central processing unit, memory, storage . . . ), an operating system, and an application implementing some particular functionality. A virtual machine is a software implementation of a physical machine that operates and appears to clients has if it is a physical machine. Similar to a physical machine, a virtual machine includes a full-fledged operating system (a.k.a., guest operating system) as well as some application. However, a virtual machine includes virtualized hardware (e.g., virtual CPU, virtual memory, virtual hard disk . . . ) over which the operating system and application operate. Each tenant is given their own virtual machine, which is isolated from other virtual machines. For example, a first tenant can run a web server inside a one virtual machine and a second tenant can run a database server inside a second virtual machine.
A library approach to operating system (OS) construction was championed by several operating system designs in the 1990s. The idea of the library OS is that the entire personality of the OS on which an application depends runs in its address space as a library. An OS personality is the implementation of the OS's application programming interfaces (APIs) and application visible semantics—the OS services upon which applications are built. Early proponents of the library OS approach argued primarily that the library OS could enable better performance through per-application customization. For example, a disk-I/O bound application with idiosyncratic file access patterns can realize better performance by using a custom file-system storage stack rather than using default sequential prefetching heuristics.
Like many of its contemporaries, the library OS approach is largely forgotten, a casualty of the rise of the modern virtual machines. While most new OS designs of the time, including library OS design, run only a handful of custom applications on small research prototypes, virtual machine systems proliferated because they could run major applications by reusing existing feature-rich operating systems. The performance benefits offered by library OS designs did not overcome the need for legacy compatibility.